# @Time : 2024/10/31 22:09
# @Author : Fioman 
# @Phone : 13149920693
"""
python中函数参数的传递其实是按照对象来传递的,python中一切皆对象,所以可以看成是按照引用来传递
的参数,但是虽然是按照引用来传递的参数,但是因为python的数据类型分为可变和不可变,所以不可变的数据
类型作为参数的时候,在内部修改了变量的值,外部的值不会发生改变.只有是可变类型的时候,函数内部修改
外部才会跟着改变.
不可变类型: 数值类型,字符串,元组
可变类型: 列表,集合,字典
python的参数传递方式: 按对象引用或者对象共享传递,即不是严格意义上的值传递,也不会严格意义上的
引用传递
"""


# region 1. 参数传递不是对象的副本,而是传递的这个对象本身,如何去验证这件事呢
def check_args_id(a):
    print("id(a) = {}".format(id(a)))
    a += 10  # 这里会创建一个新的对象赋值给a这个变量,然后这个对象和之前的x对象就不再是同一个对象了
    print("after modify: id(a) = {}".format(id(a)))


x = 10  # 外部的10
print("id(x) = {}".format(id(x)))
check_args_id(x)


# endregion

# region 2. 可变对象作为参数的时候,参数内部的改变会导致外面的改变.
def check_list_id(lst):
    print("id(lst) = {}".format(id(lst)))
    lst.append(10)
    lst.extend([20, 30])
    print("after modify: id(lst) = {}".format(id(lst)))


outerList = [1, 2, 3, 4]
print("id(outerList) = {}".format(id(outerList)))
check_list_id(outerList)
# endregion
